Take Home Exercise 1

A short description of the post.

Toh Jun Long https://linkedin.com/in/tohjunlong
09-06-2021
  1. Introduction

Since late December 2019, an outbreak of a novel coronavirus disease (COVID-19; previously known as 2019-nCoV) was reported in Wuhan, China, which had subsequently affected 210 countries worldwide. In general, COVID-19 is an acute resolved disease but it can also be deadly, with a 2% case fatality rate.

The COVID-19 pandemic in Indonesia is part of the ongoing worldwide pandemic of coronavirus disease 2019 (COVID-19) caused by severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2). The virus was confirmed to have reached Indonesia on March 2, 2020. It started with two cases in March. As of July 31 2021, there had been 3,409,658 cumulative confirmed cases of COVID-19 in Indonesia and 94,119 reported cumulative deaths. All cases were spread in 34 provinces in Indonesia. Among all the provinces, DKI Jakarta (Indonesian: Daerah Khusus Ibukota Jakarta and in English: Special Capital Region of Jakarta) contributed close to 24% of the cumulative confirmed cases.

Despite its compactness, the cumulative confirmed cases were not evenly distributed within DKI Jakarta as Figure below reveals at the district and sub-district levels. The question was where were the sub-districts with relatively higher number of confirmed cases and how they changed over time.

Goals: - Identify the sub-districts with higher number of confirmed cases than average - Visualize the change in COVID-19 infection from March 2020 to August 2021

  1. Data

Data: 1. Open Data Covid-19 Provinsi DKI Jakarta - source: Riwayat File Covid-19 DKI Jakarta - Format: xlsx 2. Shapefile (SHP) Batas Desa Provinsi DKI Jakarta - source: PODES 2019 - Format: shp

  1. Installing and loading the necessary packages if not installed

Packages used: maptools, sf, raster, spatstat and tmap, tidyverse, readxl

packages = c('maptools', 'sf', 'raster','spatstat', 'tmap','tidyverse','readxl')
for(p in packages){
  if(!require(p,character.only = T)){
    install.packages(p)
  }
  library(p,character.only = T)
}
  1. Importing the data

Reading the datas

jakarta = st_read(dsn = "data/Geospatial",
                  layer = "BATAS_DESA_DESEMBER_2019_DUKCAPIL_DKI_JAKARTA")
Reading layer `BATAS_DESA_DESEMBER_2019_DUKCAPIL_DKI_JAKARTA' from data source `C:\JunLonggggg\junlong-is415\_posts\2021-09-06-take-home-exercise-1\data\Geospatial' 
  using driver `ESRI Shapefile'
Simple feature collection with 269 features and 161 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 106.3831 ymin: -6.370815 xmax: 106.9728 ymax: -5.184322
Geodetic CRS:  WGS 84

Check crs

st_crs(jakarta)
Coordinate Reference System:
  User input: WGS 84 
  wkt:
GEOGCRS["WGS 84",
    DATUM["World Geodetic System 1984",
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["latitude",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["longitude",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    ID["EPSG",4326]]

Upon Reading the CRS, we can see that the projected coordinate systrem is different from the designated system of Indoneisa, which is DGN95 / Indonesia TM-3 zone 54.1, EPSG: 23845.

We then have to transform the projection to EPSG:23845.

jakarta_sf23845 = st_transform(jakarta, 23845)
st_crs(jakarta_sf23845)
Coordinate Reference System:
  User input: EPSG:23845 
  wkt:
PROJCRS["DGN95 / Indonesia TM-3 zone 54.1",
    BASEGEOGCRS["DGN95",
        DATUM["Datum Geodesi Nasional 1995",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4755]],
    CONVERSION["Indonesia TM-3 zone 54.1",
        METHOD["Transverse Mercator",
            ID["EPSG",9807]],
        PARAMETER["Latitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8801]],
        PARAMETER["Longitude of natural origin",139.5,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["Scale factor at natural origin",0.9999,
            SCALEUNIT["unity",1],
            ID["EPSG",8805]],
        PARAMETER["False easting",200000,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",1500000,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["easting (X)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["northing (Y)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    USAGE[
        SCOPE["Cadastre."],
        AREA["Indonesia - onshore east of 138°E."],
        BBOX[-9.19,138,-1.49,141.01]],
    ID["EPSG",23845]]

The change has been completed. WE can use st_geometry to take a look at the sf attributes.

st_geometry(jakarta_sf23845)
Geometry set for 269 features 
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -3691981 ymin: 663887.8 xmax: -3606237 ymax: 815440.9
Projected CRS: DGN95 / Indonesia TM-3 zone 54.1
First 5 geometries:

Finding the common values of outer islands. By clicking at a few of the outer islands, we can see that one common data value is “KEPULAUAN SERIBU” under “KAB_KOTA”(City District) attribute.

tmap_mode("view")
tm_shape(jakarta_sf23845)+
  tm_polygons()

We can add in colors to confirm that the outer islands have a common value for KAB_KOTA

tm_shape(jakarta_sf23845)+
  tm_polygons() +
tm_shape(jakarta_sf23845) +
  tm_fill("KAB_KOTA",
          palette = "RdYlBu")+
  tm_borders()

setting tmap_mode back to plot

tmap_mode("plot")

Using the colSums to check the number of missing values in each attribute. From this we can see that there are at most 2 unique missing value. We need to check if we can remove the 2 value or we should keep it.

colSums(is.na(jakarta_sf23845))
 OBJECT_ID  KODE_DESA       DESA       KODE   PROVINSI   KAB_KOTA 
         0          0          0          0          0          2 
 KECAMATAN DESA_KELUR JUMLAH_PEN  JUMLAH_KK LUAS_WILAY  KEPADATAN 
         2          2          0          0          0          0 
PERPINDAHA JUMLAH_MEN  PERUBAHAN  WAJIB_KTP      SILAM    KRISTEN 
         0          0          0          0          0          0 
  KHATOLIK      HINDU      BUDHA   KONGHUCU KEPERCAYAA       PRIA 
         0          0          0          0          0          0 
    WANITA BELUM_KAWI      KAWIN CERAI_HIDU CERAI_MATI         U0 
         0          0          0          0          0          0 
        U5        U10        U15        U20        U25        U30 
         0          0          0          0          0          0 
       U35        U40        U45        U50        U55        U60 
         0          0          0          0          0          0 
       U65        U70        U75 TIDAK_BELU BELUM_TAMA   TAMAT_SD 
         0          0          0          0          0          0 
      SLTP       SLTA  DIPLOMA_I DIPLOMA_II DIPLOMA_IV  STRATA_II 
         0          0          0          0          0          0 
STRATA_III BELUM_TIDA APARATUR_P TENAGA_PEN WIRASWASTA  PERTANIAN 
         0          0          0          0          0          0 
   NELAYAN  AGAMA_DAN PELAJAR_MA TENAGA_KES  PENSIUNAN    LAINNYA 
         0          0          0          0          0          0 
 GENERATED KODE_DES_1     BELUM_    MENGUR_   PELAJAR_ PENSIUNA_1 
         2          2          0          0          0          0 
  PEGAWAI_    TENTARA KEPOLISIAN    PERDAG_     PETANI    PETERN_ 
         0          0          0          0          0          0 
 NELAYAN_1   INDUSTR_    KONSTR_    TRANSP_    KARYAW_    KARYAW1 
         0          0          0          0          0          0 
 KARYAW1_1 KARYAW1_12      BURUH     BURUH_     BURUH1   BURUH1_1 
         0          0          0          0          0          0 
  PEMBANT_     TUKANG   TUKANG_1  TUKANG_12 TUKANG__13 TUKANG__14 
         0          0          0          0          0          0 
TUKANG__15 TUKANG__16 TUKANG__17     PENATA    PENATA_  PENATA1_1 
         0          0          0          0          0          0 
   MEKANIK   SENIMAN_      TABIB    PARAJI_   PERANCA_    PENTER_ 
         0          0          0          0          0          0 
    IMAM_M    PENDETA     PASTOR   WARTAWAN     USTADZ     JURU_M 
         0          0          0          0          0          0 
    PROMOT   ANGGOTA_   ANGGOTA1 ANGGOTA1_1   PRESIDEN WAKIL_PRES 
         0          0          0          0          0          0 
ANGGOTA1_2 ANGGOTA1_3     DUTA_B   GUBERNUR WAKIL_GUBE     BUPATI 
         0          0          0          0          0          0 
WAKIL_BUPA   WALIKOTA WAKIL_WALI ANGGOTA1_4 ANGGOTA1_5      DOSEN 
         0          0          0          0          0          0 
      GURU      PILOT PENGACARA_    NOTARIS    ARSITEK    AKUNTA_ 
         0          0          0          0          0          0 
   KONSUL_     DOKTER      BIDAN    PERAWAT    APOTEK_  PSIKIATER 
         0          0          0          0          0          0 
   PENYIA_    PENYIA1     PELAUT   PENELITI      SOPIR     PIALAN 
         0          0          0          0          0          0 
PARANORMAL    PEDAGA_    PERANG_    KEPALA_    BIARAW_ WIRASWAST_ 
         0          0          0          0          0          0 
LAINNYA_12  LUAS_DESA KODE_DES_3 DESA_KEL_1    KODE_12   geometry 
         0          0          2          2          0          0 

Using rowSums and extracting any rows with missing value, we can see that it is truly 2 unique row that contains missing values in some of the columns, however, the data can still be kept within the dataframe as it provides geospatial properties that is part of a full constructed map.

jakarta_sf23845[rowSums(is.na(jakarta_sf23845)) >0,]
Simple feature collection with 2 features and 161 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -3623599 ymin: 691982.5 xmax: -3620985 ymax: 693163.1
Projected CRS: DGN95 / Indonesia TM-3 zone 54.1
    OBJECT_ID KODE_DESA             DESA   KODE    PROVINSI KAB_KOTA
243     25645  31888888     DANAU SUNTER 318888 DKI JAKARTA     <NA>
244     25646  31888888 DANAU SUNTER DLL 318888 DKI JAKARTA     <NA>
    KECAMATAN DESA_KELUR JUMLAH_PEN JUMLAH_KK LUAS_WILAY KEPADATAN
243      <NA>       <NA>          0         0          0         0
244      <NA>       <NA>          0         0          0         0
    PERPINDAHA JUMLAH_MEN PERUBAHAN WAJIB_KTP SILAM KRISTEN KHATOLIK
243          0          0         0         0     0       0        0
244          0          0         0         0     0       0        0
    HINDU BUDHA KONGHUCU KEPERCAYAA PRIA WANITA BELUM_KAWI KAWIN
243     0     0        0          0    0      0          0     0
244     0     0        0          0    0      0          0     0
    CERAI_HIDU CERAI_MATI U0 U5 U10 U15 U20 U25 U30 U35 U40 U45 U50
243          0          0  0  0   0   0   0   0   0   0   0   0   0
244          0          0  0  0   0   0   0   0   0   0   0   0   0
    U55 U60 U65 U70 U75 TIDAK_BELU BELUM_TAMA TAMAT_SD SLTP SLTA
243   0   0   0   0   0          0          0        0    0    0
244   0   0   0   0   0          0          0        0    0    0
    DIPLOMA_I DIPLOMA_II DIPLOMA_IV STRATA_II STRATA_III BELUM_TIDA
243         0          0          0         0          0          0
244         0          0          0         0          0          0
    APARATUR_P TENAGA_PEN WIRASWASTA PERTANIAN NELAYAN AGAMA_DAN
243          0          0          0         0       0         0
244          0          0          0         0       0         0
    PELAJAR_MA TENAGA_KES PENSIUNAN LAINNYA GENERATED KODE_DES_1
243          0          0         0       0      <NA>       <NA>
244          0          0         0       0      <NA>       <NA>
    BELUM_ MENGUR_ PELAJAR_ PENSIUNA_1 PEGAWAI_ TENTARA KEPOLISIAN
243      0       0        0          0        0       0          0
244      0       0        0          0        0       0          0
    PERDAG_ PETANI PETERN_ NELAYAN_1 INDUSTR_ KONSTR_ TRANSP_ KARYAW_
243       0      0       0         0        0       0       0       0
244       0      0       0         0        0       0       0       0
    KARYAW1 KARYAW1_1 KARYAW1_12 BURUH BURUH_ BURUH1 BURUH1_1
243       0         0          0     0      0      0        0
244       0         0          0     0      0      0        0
    PEMBANT_ TUKANG TUKANG_1 TUKANG_12 TUKANG__13 TUKANG__14
243        0      0        0         0          0          0
244        0      0        0         0          0          0
    TUKANG__15 TUKANG__16 TUKANG__17 PENATA PENATA_ PENATA1_1 MEKANIK
243          0          0          0      0       0         0       0
244          0          0          0      0       0         0       0
    SENIMAN_ TABIB PARAJI_ PERANCA_ PENTER_ IMAM_M PENDETA PASTOR
243        0     0       0        0       0      0       0      0
244        0     0       0        0       0      0       0      0
    WARTAWAN USTADZ JURU_M PROMOT ANGGOTA_ ANGGOTA1 ANGGOTA1_1
243        0      0      0      0        0        0          0
244        0      0      0      0        0        0          0
    PRESIDEN WAKIL_PRES ANGGOTA1_2 ANGGOTA1_3 DUTA_B GUBERNUR
243        0          0          0          0      0        0
244        0          0          0          0      0        0
    WAKIL_GUBE BUPATI WAKIL_BUPA WALIKOTA WAKIL_WALI ANGGOTA1_4
243          0      0          0        0          0          0
244          0      0          0        0          0          0
    ANGGOTA1_5 DOSEN GURU PILOT PENGACARA_ NOTARIS ARSITEK AKUNTA_
243          0     0    0     0          0       0       0       0
244          0     0    0     0          0       0       0       0
    KONSUL_ DOKTER BIDAN PERAWAT APOTEK_ PSIKIATER PENYIA_ PENYIA1
243       0      0     0       0       0         0       0       0
244       0      0     0       0       0         0       0       0
    PELAUT PENELITI SOPIR PIALAN PARANORMAL PEDAGA_ PERANG_ KEPALA_
243      0        0     0      0          0       0       0       0
244      0        0     0      0          0       0       0       0
    BIARAW_ WIRASWAST_ LAINNYA_12 LUAS_DESA KODE_DES_3 DESA_KEL_1
243       0          0          0         0       <NA>       <NA>
244       0          0          0         0       <NA>       <NA>
    KODE_12                       geometry
243       0 MULTIPOLYGON (((-3620985 69...
244       0 MULTIPOLYGON (((-3622382 69...

Instead of dropping the rows with missing values, we can fill in with a string “Missing” as a placeholder. This can only be done if the columns do not contain important information that is useful for further processing

jakarta_sf23845[is.na(jakarta_sf23845)] = "Missing"

Dropping the rows that has “KEPULAUAN SERIBU” in column, KAB_KOTA

jakarta_sf23845_cleaned = jakarta_sf23845[jakarta_sf23845$KAB_KOTA != "KEPULAUAN SERIBU",]

checking geometry validity

length(which(st_is_valid(jakarta_sf23845_cleaned) == FALSE))
[1] 0

Confirming that external islands are removed

tm_shape(jakarta_sf23845_cleaned)+
  tm_polygons()

Retrieving first 9 columns of the data frame to be the cleaned data frame

jakarta_sf23845_cleaned = jakarta_sf23845_cleaned[,c(1:9)]
head(jakarta_sf23845_cleaned,5)
Simple feature collection with 5 features and 9 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -3627698 ymin: 689029.1 xmax: -3619528 ymax: 693390.8
Projected CRS: DGN95 / Indonesia TM-3 zone 54.1
  OBJECT_ID  KODE_DESA          DESA   KODE    PROVINSI      KAB_KOTA
1     25477 3173031006     KEAGUNGAN 317303 DKI JAKARTA JAKARTA BARAT
2     25478 3173031007        GLODOK 317303 DKI JAKARTA JAKARTA BARAT
3     25397 3171031003 HARAPAN MULIA 317103 DKI JAKARTA JAKARTA PUSAT
4     25400 3171031006  CEMPAKA BARU 317103 DKI JAKARTA JAKARTA PUSAT
7     25390 3171021001    PASAR BARU 317102 DKI JAKARTA JAKARTA PUSAT
    KECAMATAN    DESA_KELUR JUMLAH_PEN                       geometry
1  TAMAN SARI     KEAGUNGAN      21609 MULTIPOLYGON (((-3626874 69...
2  TAMAN SARI        GLODOK       9069 MULTIPOLYGON (((-3627130 69...
3   KEMAYORAN HARAPAN MULIA      29085 MULTIPOLYGON (((-3621251 68...
4   KEMAYORAN  CEMPAKA BARU      41913 MULTIPOLYGON (((-3620608 69...
7 SAWAH BESAR    PASAR BARU      15793 MULTIPOLYGON (((-3624097 69...

Importing Aspatial data (Daily COVID 19 DKI Jakarta)

jakarta_covid = read_excel("data/Aspatial/Daily COVID 19 DKI Jakarta.xlsx") 
jakarta_covid = jakarta_covid[-1,]
list(jakarta_covid)
[[1]]
# A tibble: 4,842 x 8
   ID_KEL     Nama_provinsi nama_kota       nama_kecamatan nama_kelurahan
   <chr>      <chr>         <chr>           <chr>          <chr>         
 1 3172051003 DKI JAKARTA   JAKARTA UTARA   PADEMANGAN     ANCOL         
 2 3173041007 DKI JAKARTA   JAKARTA BARAT   TAMBORA        ANGKE         
 3 3175041005 DKI JAKARTA   JAKARTA TIMUR   KRAMAT JATI    BALE KAMBANG  
 4 3175031003 DKI JAKARTA   JAKARTA TIMUR   JATINEGARA     BALI MESTER   
 5 3175101006 DKI JAKARTA   JAKARTA TIMUR   CIPAYUNG       BAMBU APUS    
 6 3174031002 DKI JAKARTA   JAKARTA SELATAN MAMPANG PRAPA~ BANGKA        
 7 3175051002 DKI JAKARTA   JAKARTA TIMUR   PASAR REBO     BARU          
 8 3175041004 DKI JAKARTA   JAKARTA TIMUR   KRAMAT JATI    BATU AMPAR    
 9 3171071002 DKI JAKARTA   JAKARTA PUSAT   TANAH ABANG    BENDUNGAN HIL~
10 3175031002 DKI JAKARTA   JAKARTA TIMUR   JATINEGARA     BIDARA CINA   
# ... with 4,832 more rows, and 3 more variables: Month_year <chr>,
#   POSITIF <dbl>, Meninggal <dbl>

Geospatial Data Integration:

Creating a function to initialise month data frame.

init_month = function(df, month){
  result = df[df$Month_year == month,]
  return(result)
}

Creating a function to perform left_join from aspatial dataframe to geospatial dataframe.

join_funct = function(aspatial_df){
  result = left_join(jakarta_sf23845_cleaned,aspatial_df,by = c("DESA_KELUR" = "nama_kelurahan")) %>% 
    mutate(`cumulative confirmed cases rate` = (`POSITIF`/`JUMLAH_PEN`)) %>% 
    mutate(`cumulative confirmed death rate` = (`Meninggal`/`JUMLAH_PEN`))
  return(result)
}

using both function to initialize and join to create covid-19 dataframe of each month

mar_20_covid = join_funct(init_month(jakarta_covid,"Mar-20"))
apr_20_covid = join_funct(init_month(jakarta_covid,"Apr-20"))
may_20_covid = join_funct(init_month(jakarta_covid,"May-20"))
jun_20_covid = join_funct(init_month(jakarta_covid,"Jun-20"))
jul_20_covid = join_funct(init_month(jakarta_covid,"Jul-20"))
aug_20_covid = join_funct(init_month(jakarta_covid,"Aug-20"))
sep_20_covid = join_funct(init_month(jakarta_covid,"Sep-20"))
oct_20_covid = join_funct(init_month(jakarta_covid,"Oct-20"))
nov_20_covid = join_funct(init_month(jakarta_covid,"Nov-20"))
dec_20_covid = join_funct(init_month(jakarta_covid,"Dec-20"))
jan_21_covid = join_funct(init_month(jakarta_covid,"Jan-21"))
feb_21_covid = join_funct(init_month(jakarta_covid,"Feb-21"))
mar_21_covid = join_funct(init_month(jakarta_covid,"Mar-21"))
apr_21_covid = join_funct(init_month(jakarta_covid,"Apr-21"))
may_21_covid = join_funct(init_month(jakarta_covid,"May-21"))
jun_21_covid = join_funct(init_month(jakarta_covid,"Jun-21"))
jul_21_covid = join_funct(init_month(jakarta_covid,"Jul-21"))
aug_21_covid = join_funct(init_month(jakarta_covid,"Aug-21"))
  1. Maps

6.1 Thematic Mapping

6.1.1 At a glance:

Distribution of COVID-19 cumulative positive and death cases up till 31 December 2020

tm_shape(jakarta_sf23845_cleaned)+
  tm_polygons()+
tm_shape(dec_20_covid) +
  tm_fill(c("POSITIF","Meninggal"),
          style = "jenks",
          palette = "Blues")+
  tm_layout(legend.outside = TRUE,
            legend.position = c("right","bottom"))+
  tm_borders()

From this we can see that some areas have both high postive cases and death rates for the daily data until 31 dec 2020.

Distribution of COVID-19 cumulative positive and death cases up till 31 August 2021

tm_shape(jakarta_sf23845_cleaned)+
  tm_polygons()+
tm_shape(aug_21_covid) +
  tm_fill(c("POSITIF","Meninggal"),
          style = "jenks",
          palette = "Blues")+
  tm_layout(legend.outside = TRUE,
            legend.position = c("right","bottom"))+
  tm_borders()

From this we can see that similar to dec 2020, some areas have both high postive cases and death rates for the daily data until 31 Aug 2021, however, the number of cases also increased from max of 1360 to 6547.

Function for creating standard map with Quanitle distribution

map1 = function(df, vname, legtitle = NA,mtitle = NA){
  tm_shape(df) +
    tm_fill(vname,
            style = "quantile",
            palette = "Blues",
            title = legtitle
            )+
    tm_layout(main.title = mtitle,
              main.title.position = "center",
              main.title.size = 0.8,
              legend.outside = TRUE,
              legend.position = c("right","bottom"),
              frame = TRUE
              )+
    tm_borders(alpha = 0.5)+
    tm_scale_bar(width = 0.15) +
    tm_grid(lwd = 0.1, alpha = 0.2) +
    tm_credits("Source: Open Data Covid-19 Provinsi DKI Jakarta. from Riwayat File Covid-19 DKI Jakarta", 
               position = c("left", "bottom"))
}

Creating the individual cumulative confirmed cases maps for each month.

cumu_case_mar_20 = map1(mar_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","March 2020")
cumu_case_apr_20 = map1(apr_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","April 2020")
cumu_case_may_20 = map1(may_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","May 2020")
cumu_case_jun_20 = map1(jun_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","June 2020")
cumu_case_jul_20 = map1(jul_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","July 2020")
cumu_case_aug_20 = map1(aug_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","August 2020")
cumu_case_sep_20 = map1(sep_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","September 2020")
cumu_case_oct_20 = map1(oct_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","October 2020")
cumu_case_nov_20 = map1(nov_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","November 2020")
cumu_case_dec_20 = map1(dec_20_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","December 2020")
cumu_case_jan_21 = map1(jan_21_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","January 2021")
cumu_case_feb_21 = map1(feb_21_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","February 2021")
cumu_case_mar_21 = map1(mar_21_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","March 2021")
cumu_case_apr_21 = map1(apr_21_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","April 2021")
cumu_case_may_21 = map1(may_21_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","May 2021")
cumu_case_jun_21 = map1(jun_21_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","June 2021")
cumu_case_jul_21 = map1(jul_21_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","July 2021")
cumu_case_aug_21 = map1(aug_21_covid,"cumulative confirmed cases rate","Cumulative Postive Cases","August 2021")

Using tmap_arrange to arrange the individual map to into a 4 (columns) by 3 (rows) layout.

Cumulative Confirmed Cases rate for each month from March 2020 to June 2020 (4 Months)

tmap_arrange(cumu_case_mar_20,cumu_case_apr_20,cumu_case_may_20,cumu_case_jun_20, asp = 1, ncol = 2)

Cumulative Confirmed Cases rate for each month from July 2020 to October 2020 (4 Months)

tmap_arrange(cumu_case_jul_20,cumu_case_aug_20,cumu_case_sep_20,cumu_case_oct_20, asp = 1, ncol = 2)

Cumulative Confirmed Cases rate for each month from November 2020 to February 2021 (4 Months)

tmap_arrange(cumu_case_nov_20,cumu_case_dec_20,cumu_case_jan_21,cumu_case_feb_21, asp = 1, ncol = 2)

Cumulative Confirmed Cases rate for each month from March 2021 to June 2021 (4 Months)

tmap_arrange(cumu_case_mar_21,cumu_case_apr_21,cumu_case_may_21,cumu_case_jun_21, asp = 1, ncol = 2)

Cumulative Confirmed Cases rate for each month from July 2021 to August 2021 (2 Months)

tmap_arrange(cumu_case_jul_21,cumu_case_aug_21, asp = 1, ncol = 2)

From the graphical visualization, we can see that the while the cumulative positive case rate increases to 0.394 confirmed case per population, the spread of the confirmed cases starts more severely in north Jakarta in March 2020, before moving towards south Jakarta by Aug 2021

Creating the individual cumulative death cases maps for each month.

cumu_death_mar_20 = map1(mar_20_covid,"cumulative confirmed death rate","Death Cases","March 2020")
cumu_death_apr_20 = map1(apr_20_covid,"cumulative confirmed death rate","Death Cases","April 2020")
cumu_death_may_20 = map1(may_20_covid,"cumulative confirmed death rate","Death Cases","May 2020")
cumu_death_jun_20 = map1(jun_20_covid,"cumulative confirmed death rate","Death Cases","June 2020")
cumu_death_jul_20 = map1(jul_20_covid,"cumulative confirmed death rate","Death Cases","July 2020")
cumu_death_aug_20 = map1(aug_20_covid,"cumulative confirmed death rate","Death Cases","August 2020")
cumu_death_sep_20 = map1(sep_20_covid,"cumulative confirmed death rate","Death Cases","September 2020")
cumu_death_oct_20 = map1(oct_20_covid,"cumulative confirmed death rate","Death Cases","October 2020")
cumu_death_nov_20 = map1(nov_20_covid,"cumulative confirmed death rate","Death Cases","November 2020")
cumu_death_dec_20 = map1(dec_20_covid,"cumulative confirmed death rate","Death Cases","December 2020")
cumu_death_jan_21 = map1(jan_21_covid,"cumulative confirmed death rate","Death Cases","January 2020")
cumu_death_feb_21 = map1(feb_21_covid,"cumulative confirmed death rate","Death Cases","February 2020")
cumu_death_mar_21 = map1(mar_21_covid,"cumulative confirmed death rate","Death Cases","March 2020")
cumu_death_apr_21 = map1(apr_21_covid,"cumulative confirmed death rate","Death Cases","April 2020")
cumu_death_may_21 = map1(may_21_covid,"cumulative confirmed death rate","Death Cases","May 2020")
cumu_death_jun_21 = map1(jun_21_covid,"cumulative confirmed death rate","Death Cases","June 2020")
cumu_death_jul_21 = map1(jul_21_covid,"cumulative confirmed death rate","Death Cases","July 2020")
cumu_death_aug_21 = map1(aug_21_covid,"cumulative confirmed death rate","Death Cases","August 2020")

Using tmap_arrange to arrange the individual map to into a 4 (columns) by 3 (rows) layout.

Cumulative death rate for each month from March 2020 to June 2020 (4 months)

tmap_arrange(cumu_death_mar_20,cumu_death_apr_20,cumu_death_may_20,cumu_death_jun_20, asp = 1, ncol = 2)

Cumulative death rate for each month from July 2020 to October 2020 (4 months)

tmap_arrange(cumu_death_jul_20,cumu_death_aug_20,cumu_death_sep_20,cumu_death_oct_20, asp = 1, ncol = 2)

Cumulative death rate for each month from November 2020 to February 2021 (4 months)

tmap_arrange(cumu_death_nov_20,cumu_death_dec_20,cumu_death_jan_21,cumu_death_feb_21, asp = 1, ncol = 2)

Cumulative death rate for each month from March 2020 to June 2021 (4 months)

tmap_arrange(cumu_death_mar_21,cumu_death_apr_21,cumu_death_may_21,cumu_death_jun_21, asp = 1, ncol = 2)

Cumulative death rate for each month from July 2021 to August 2021 (2 months)

tmap_arrange(cumu_death_jul_21,cumu_death_aug_21, asp = 1, ncol = 2)

From the graphical visualization, we can see that the while the cumulative death rate increases to 0.0042 death toll per population, most of the highest death rate occurs around the central of Jakarta.